import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',
  timeout: 10000
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 添加调试日志
    console.log('🚀 发送请求:', {
      url: config.baseURL + config.url,
      method: config.method,
      data: config.data,
      headers: config.headers
    })
    return config
  },
  error => {
    console.error('❌ 请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    console.log('✅ 收到响应:', {
      status: response.status,
      data: response.data,
      headers: response.headers,
      url: response.config.url
    })
    const res = response.data
    if (res.code !== 200) {
      ElMessage.error(res.message || '请求失败')
      return Promise.reject(new Error(res.message || 'Error'))
    }
    return res
  },
  error => {
    console.error('❌ 响应错误:', {
      message: error.message,
      status: error.response?.status,
      statusText: error.response?.statusText,
      data: error.response?.data,
      config: error.config,
      url: error.config?.url,
      baseURL: error.config?.baseURL
    })

    // 更详细的错误信息
    let errorMessage = '网络错误'
    if (error.response) {
      // 服务器返回了错误状态码
      switch (error.response.status) {
        case 401:
          errorMessage = '未授权，请重新登录'
          break
        case 403:
          errorMessage = '拒绝访问'
          break
        case 404:
          errorMessage = '请求的资源不存在'
          break
        case 500:
          errorMessage = '服务器内部错误'
          break
        case 502:
        case 503:
        case 504:
          errorMessage = '服务器暂时无法响应'
          break
        default:
          errorMessage = error.response.data?.message || `请求失败 (${error.response.status})`
      }
    } else if (error.request) {
      // 请求已发送但没有收到响应
      errorMessage = '网络连接失败，请检查网络或服务器状态'
      if (error.code === 'ECONNREFUSED') {
        errorMessage = '无法连接到服务器，请检查服务器是否运行'
      } else if (error.code === 'ETIMEDOUT') {
        errorMessage = '请求超时，请稍后重试'
      }
    }

    ElMessage.error(errorMessage)
    return Promise.reject(error)
  }
)

export default request